package comunicacion;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ParametrosEntorno {	
	public static final int CONECTAR_CON_SIMULADOR = 1;
	public static final int CONECTAR_CON_ENTORNO_REAL = 2;
	
	private static final String NOMBRE_ARCHIVO_SIMULADOR = "Parametros/Simulador.properties";
	private static final String NOMBRE_ARCHIVO_ENTORNO_REAL = "Parametros/EntornoReal.properties";
	
	public static double BETA;
	public static double GAMMA;
	public static double H;
	
	public static double MAXIMA_VELOCIDAD_DIRECT;
	public static double FACTOR_VARIACION_VELOCIDAD_DIRECT;
	
	public static double TOLERANCIA_ANGULO;
	public static double DISTANCIA_ACEPTABLE;
	
	public static double DISTANCIA_RANGO_ATAQUE;
	public static double DISTANCIA_PELIGRO_COLISION;
	
	public static double MARGEN_GIRO;
	
	// Paredes
	public static double POSICION_PARED_DERECHA;
	public static double POSICION_PARED_IZQUIERDA;
	public static double POSICION_PARED_DELANTERA;
	public static double POSICION_PARED_TRASERA;
	
	
	public static void cargarPropiedades(int idEntorno) throws IOException {
		String nombreArchivo = null;
		if (idEntorno == CONECTAR_CON_SIMULADOR)
			nombreArchivo = NOMBRE_ARCHIVO_SIMULADOR;
		else
			nombreArchivo = NOMBRE_ARCHIVO_ENTORNO_REAL;
		
		Properties properties = new Properties();	    
    	InputStream is = new FileInputStream(nombreArchivo);
        properties.load(is);
    
	    if (properties.containsKey("BETA")) {
	    	BETA = Double.parseDouble(properties.getProperty("BETA"));
	    } else {
	    	avisarError("BETA");
	    }
	    
	    if (properties.containsKey("GAMMA")) {
	    	GAMMA = Double.parseDouble(properties.getProperty("GAMMA"));
	    } else {
	    	avisarError("GAMMA");
	    }
	    
	    if (properties.containsKey("H")) {
	    	H = Double.parseDouble(properties.getProperty("H"));
	    } else {
	    	avisarError("H");
	    }
	  
	    if (properties.containsKey("MAXIMA_VELOCIDAD_DIRECT")) {
	    	MAXIMA_VELOCIDAD_DIRECT = Double.parseDouble(properties.getProperty("MAXIMA_VELOCIDAD_DIRECT"));
	    } else {
	    	avisarError("MAXIMA_VELOCIDAD_DIRECT");
	    }
	    
	    if (properties.containsKey("FACTOR_VARIACION_VELOCIDAD_DIRECT")) {
	    	FACTOR_VARIACION_VELOCIDAD_DIRECT = Double.parseDouble(properties.getProperty("FACTOR_VARIACION_VELOCIDAD_DIRECT"));
	    } else {
	    	avisarError("FACTOR_VARIACION_VELOCIDAD_DIRECT");
	    }
	    
	    if (properties.containsKey("TOLERANCIA_ANGULO")) {
	    	TOLERANCIA_ANGULO = Double.parseDouble(properties.getProperty("TOLERANCIA_ANGULO"));
	    } else {
	    	avisarError("TOLERANCIA_ANGULO");
	    }
	    
	    if (properties.containsKey("DISTANCIA_ACEPTABLE")) {
	    	DISTANCIA_ACEPTABLE = Double.parseDouble(properties.getProperty("DISTANCIA_ACEPTABLE"));
	    } else {
	    	avisarError("DISTANCIA_ACEPTABLE");
	    }
	    
	    if (properties.containsKey("DISTANCIA_RANGO_ATAQUE")) {
	    	DISTANCIA_RANGO_ATAQUE = Double.parseDouble(properties.getProperty("DISTANCIA_RANGO_ATAQUE"));
	    } else {
	    	avisarError("DISTANCIA_RANGO_ATAQUE");
	    }
	    
	    if (properties.containsKey("DISTANCIA_PELIGRO_COLISION")) {
	    	DISTANCIA_PELIGRO_COLISION = Double.parseDouble(properties.getProperty("DISTANCIA_PELIGRO_COLISION"));
	    } else {
	    	avisarError("DISTANCIA_PELIGRO_COLISION");
	    }
	    
	    if (properties.containsKey("MARGEN_GIRO")) {
	    	MARGEN_GIRO = Double.parseDouble(properties.getProperty("MARGEN_GIRO"));
	    } else {
	    	avisarError("MARGEN_GIRO");
	    }
	    
	    if (properties.containsKey("POSICION_PARED_DERECHA")) {
	    	POSICION_PARED_DERECHA = Double.parseDouble(properties.getProperty("POSICION_PARED_DERECHA"));
	    } else { 
	    	avisarError("POSICION_PARED_DERECHA");
	    }
	    
	    if (properties.containsKey("POSICION_PARED_IZQUIERDA")) {
	    	POSICION_PARED_IZQUIERDA = Double.parseDouble(properties.getProperty("POSICION_PARED_IZQUIERDA"));
	    } else {
	    	avisarError("POSICION_PARED_IZQUIERDA");
	    }
	    
	    if (properties.containsKey("POSICION_PARED_DELANTERA")) {
	    	POSICION_PARED_DELANTERA = Double.parseDouble(properties.getProperty("POSICION_PARED_DELANTERA"));
	    } else {
	    	avisarError("POSICION_PARED_DELANTERA");
	    }
	    
	    if (properties.containsKey("POSICION_PARED_TRASERA")) {
	    	POSICION_PARED_TRASERA = Double.parseDouble(properties.getProperty("POSICION_PARED_TRASERA"));
	    } else {
	    	avisarError("POSICION_PARED_TRASERA");
	    }
	}
	
	private static void avisarError(String claveInexistente) throws IOException {
		throw new IOException("Falta propiedad " + claveInexistente + " en el archivo de propiedades del entorno");
	}
}
